using System;
using Server.Items;
using System.Collections;
using System.Collections.Generic;
using Server.Commands;
using Server.Mobiles;
using Server.Engines.CastSystem;

namespace Server.ClassSystem
{
    public static class Mago
    {
        // Stats
        private static int[] m_Forza;
        public static int Str(int Livello) { return 30 + (Livello - 1) * 3; }
        public static int Dex(int Livello) { return 30 + (Livello - 1) * 2; }
        public static int Int(int Livello) { return 50 + (Livello - 1) * 5; }
        public static int Forza(int Livello) { return m_Forza[Livello - 1]; }
        public static int Difesa(int Livello) { return 0; }
        public static int Schivare(int Livello) { return 0; }

        // Combattive
        public static double ArmiDaTaglio(int Livello) { return 0.0; }
        public static double ArmiContundenti(int Livello) { return 0.0; }
        public static double ArmiDaPunta(int Livello) { return 0.0; }
        public static double ArmiDaTiro(int Livello) { return 5.0; }
        public static double Lottare(int Livello) { return 30.0 + (Livello - 1) * 1.5; }
        public static double Tattica(int Livello) { return 10.0; }
        public static double Parare(int Livello) { return 00.0; }

        // Conoscenze
        public static double Anatomia(int Livello) { return 20.0; }
        public static double ConoscenzeAnimali(int Livello) { return 0.0; }
        public static double ConoscenzeArmi(int Livello) { return 05.0; }
        public static double IdentificareOggetti(int Livello) { return 30.0 + (Livello - 1) * 2.0; }
        public static double LinguaggioDeiMorti(int Livello) { return 0.0; }
        public static double ConoscenzaTerreSelvagge(int Livello) { return 0.0; }
        public static double ConoscenzeArcane(int Livello) { return 40.0 + (Livello - 1) * 3.0; }
        public static double ValutareIntelligenza(int Livello) { return 40.0 + (Livello - 1) * 4.0; }

        // Sotterfugio
        public static double Cercare(int Livello) { return 0.0; }
        public static double Spiare(int Livello) { return 0.0; }
        public static double Rubare(int Livello) { return 0.0; }
        public static double Nascondersi(int Livello) { return 0.0; }
        public static double MuoversiSilenzioso(int Livello) { return 0.0; }
        public static double RimuovereTrappole(int Livello) { return 0.0; }
        public static double Scassinare(int Livello) { return 0.0; }
        public static double Avvelenare(int Livello) { return 0.0; }

        // Altro
        public static double Elemosinare(int Livello) { return 0.0; }
        public static double Curare(int Livello) { return 15.0; }
        public static double Veterinaria(int Livello) { return 0.0; }
        public static double Meditare(int Livello) { return 40.0 + (Livello - 1) * 3.5; }
        public static double ResistenzaMagia(int Livello) { return 50.0 + (Livello - 1) * 3; }
        public static double CercareTracce(int Livello) { return 0.0; }
        public static double Suonare(int Livello) { return 0.0; }
        public static double Orientamento(int Livello) { return 0.0; }

        static Dictionary<int, int> TabellaLivelliMinimi;

        public static void Initialize()
        {
            m_Forza = new int[36] {7, 7, 7, 7, 7, 7, 8, 8, 8, 8, // liv 1-10
                                   9, 0, 0, 0, 0, 0, 0, 0, 0, 0, // liv 11-20
                                   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // liv 21-30
                                   0, 0, 0, 0, 0, 0}; // liv 31-36

            TabellaLivelliMinimi = new Dictionary<int, int>();

            // Primo circolo
            TabellaLivelliMinimi.Add(1, 1); // .castmago 1 -> 1
            TabellaLivelliMinimi.Add(2, 1); // .castmago 2 -> 1
            TabellaLivelliMinimi.Add(3, 1); // .castmago 3 -> 1
            TabellaLivelliMinimi.Add(4, 1); // .castmago 4 -> 1
            TabellaLivelliMinimi.Add(5, 1); // .castmago 5 -> 1
            TabellaLivelliMinimi.Add(6, 1); // .castmago 6 -> 1


            CommandSystem.Register("castMago", AccessLevel.Player, new CommandEventHandler(Mago.GestoreComandi));
        }


        public static void GestoreComandi(CommandEventArgs e)
        {
            // Check classe
            PlayerMobile player = (PlayerMobile)e.Mobile;

            if (player.Classe != NomeClasse.Mago && player.AccessLevel < AccessLevel.GameMaster)
                return;

            if (e.Length == 1)
            {
                int comando = e.GetInt32(0);
                // Parsing fallito, comando malformato.
                if (comando == 0)
                    return;

                int livelloMinimo;

                // Valore non valido, non compare nella tabella dei livelli minimi.
                if (!TabellaLivelliMinimi.TryGetValue(comando, out livelloMinimo))
                    return;

                // Il PG e' di livello troppo basso.
                if (livelloMinimo > player.Livello)
                    return;

                switch (comando)
                {
                    // Primo circolo
                    case 1:
                        CastSystem.LanciaCast(new Luce(player));
                        break;
                    case 2:
                        CastSystem.LanciaCast(new DardoIncantato(player));
                        break;
                    case 3:
                        CastSystem.LanciaCast(new Astuzia(player));
                        break;
                    case 4:
                        CastSystem.LanciaCast(new Debolezza(player));
                        break;
                    case 5:
                        CastSystem.LanciaCast(new Scudo(player));
                        break;
                    case 6:
                        CastSystem.LanciaCast(new EvocaMostri_1(player));
                        break;
                }
            }
        }

        public static void SettareAbilita(PlayerMobile player, int livello)
        {
            player.Skills[SkillName.Taglio].Base = ArmiDaTaglio(livello);
            player.Skills[SkillName.Contundenti].Base = ArmiContundenti(livello);
            player.Skills[SkillName.Punta].Base = ArmiDaPunta(livello);
            player.Skills[SkillName.ArmiDaTiro].Base = ArmiDaTiro(livello);
            player.Skills[SkillName.Lottare].Base = Lottare(livello);
            player.Skills[SkillName.Tattica].Base = Tattica(livello);
            player.Skills[SkillName.Parare].Base = Parare(livello);

            player.Skills[SkillName.Anatomia].Base = ArmiContundenti(livello);
            player.Skills[SkillName.ConoscenzeAnimali].Base = ConoscenzeAnimali(livello);
            player.Skills[SkillName.ConoscenzeArmi].Base = ConoscenzeArmi(livello);
            player.Skills[SkillName.IdentificareOggetti].Base = IdentificareOggetti(livello);
            player.Skills[SkillName.LinguaggioDeiMorti].Base = LinguaggioDeiMorti(livello);
            player.Skills[SkillName.ConoscenzaTerreSelvagge].Base = ConoscenzaTerreSelvagge(livello);
            player.Skills[SkillName.ConoscenzeArcane].Base = ConoscenzeArcane(livello);

            player.Skills[SkillName.Cercare].Base = Cercare(livello);
            player.Skills[SkillName.Spiare].Base = Spiare(livello);
            player.Skills[SkillName.Rubare].Base = Rubare(livello);
            player.Skills[SkillName.Nascondersi].Base = Nascondersi(livello);
            player.Skills[SkillName.MuoversiSilenzioso].Base = MuoversiSilenzioso(livello);
            player.Skills[SkillName.RimuovereTrappole].Base = RimuovereTrappole(livello);
            player.Skills[SkillName.Scassinare].Base = Scassinare(livello);
            player.Skills[SkillName.Avvelenare].Base = Avvelenare(livello);

            player.Skills[SkillName.Elemosinare].Base = Elemosinare(livello);
            player.Skills[SkillName.Curare].Base = Curare(livello);
            player.Skills[SkillName.Veterinaria].Base = Veterinaria(livello);
            player.Skills[SkillName.Meditare].Base = Meditare(livello);
            player.Skills[SkillName.ResistenzaMagia].Base = ResistenzaMagia(livello);
            player.Skills[SkillName.CercareTracce].Base = CercareTracce(livello);
            player.Skills[SkillName.Suonare].Base = Suonare(livello);
            player.Skills[SkillName.Orientamento].Base = Orientamento(livello);

            player.Str = Str(livello);
            player.Dex = Dex(livello);
            player.Int = Int(livello);
            player.Forza = Forza(livello);
            player.Difesa = Difesa(livello);
            player.Schivare = Schivare(livello);
        }
    }
}